/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle.gui.frames.internos;

import controle.gui.frames.ControleFramePrincipal;
import controle.gui.utils.ApagaElementosDaInterface;
import controle.gui.utils.Criptografia;
import controle.gui.utils.TamanhoJTextField;
import gui.frames.FramePrincipal;
import gui.frames.internos.IFAlteraSenha;
import javax.swing.JOptionPane;
import persistencia.dao.AbstractDAO;
import persistencia.dao.TransacaoDAO;

/**
 *
 * @author Maycon Fernando Silva Brito
 * @email mayconfsbrito@gmail.com
 */
public class ControleAlteraSenha {

    /*Variáveis da classe*/
    IFAlteraSenha frame = null;
    private final int[] tamanhosJTextField = {45, 45};

    /*Construtor*/
    public ControleAlteraSenha(IFAlteraSenha frame) {
        this.frame = frame;
    }

    /**
     * Inicializa a gui
     */
    public void inicializa() {

        /*Inicializa o panel de mensagens*/
        //frame.textMensagem.setEditable(false);
        frame.textMensagem.setText("Aqui você altera a sua senha.");

        /*Limita as TextFields*/
        this.limitaTextFields();

        /*Centraliza no DesktopPane*/
        frame.centraliza();

        this.preencheLoginAutomatico();
    }

    /**
     * Limpa a gui
     */
    public void limparGUI() {
        new ApagaElementosDaInterface().apagaJTextField(frame.textLogin, frame.textConfirmaSenha, frame.textNovaSenha, frame.textSenha);
    }

    private void preencheLoginAutomatico() {
        frame.textLogin.setText(ControleFramePrincipal.user.getLogin());
    }

    private void limitaTextFields() {
        /**Limita a quantidade de caracteres possíveis nas JTextFields**/
        TamanhoJTextField.limitaTamanho(tamanhosJTextField, frame.textLogin, frame.textSenha);
    }

    public void cancelar() {
        /**Caso não tenha algum usuário logado não fecha*/
        if (ControleFramePrincipal.user != null) {
            FramePrincipal.buttonLogin.setEnabled(true);
            frame.dispose();
        }
    }

    public void alterar() {
        /*Verifica se os campos estejam preenchidos*/
        if ((!frame.textLogin.getText().isEmpty()) && (frame.textSenha.getPassword().length > 0) && (frame.textNovaSenha.getPassword().length > 0)
                && (frame.textConfirmaSenha.getPassword().length > 0)) {

            /*Verifica se a senha está correta*/
            if (ControleFramePrincipal.user.getSenha().equals(Criptografia.md5(new String(frame.textSenha.getPassword())))) {
                /*Verifica se o texto digitado em Nova senha e em Confirma senha são iguais*/
                if (new String(frame.textNovaSenha.getPassword()).equals(new String(frame.textConfirmaSenha.getPassword()))) {
                    /*Verifica se o usuário está ativo no sistema*/
                    if (ControleFramePrincipal.user.isAtivo()) {

                        /*Altera a senha do usuário no bd*/
                        ControleFramePrincipal.user.setSenhaComMD5(new String(frame.textNovaSenha.getPassword()));
                        if (AbstractDAO.alterar(ControleFramePrincipal.user)) {
                            JOptionPane.showMessageDialog(frame, "A sua senha foi alterada com sucesso!",
                                    "Alteração de senha", JOptionPane.INFORMATION_MESSAGE);
                            
                            //Log do Agente
                            TransacaoDAO.cadastrar("Alterou a senha.");
                            
                            this.limparGUI();
                            frame.dispose();
                        }

                    } else {
                        JOptionPane.showMessageDialog(frame, "O usuário encontra-se inativo para utilizar este sistema.\n"
                                + "Favor contactar o administrador do sistema para poder utilizá-lo.",
                                "Usuário inativo!", JOptionPane.ERROR_MESSAGE);

                    }

                } else {
                    JOptionPane.showMessageDialog(frame, "A senha digitada em Nova Senha e em Confirmação da Nova Senha são diferentes.", "Senha inválida!", JOptionPane.WARNING_MESSAGE);
                }
            } else {
                JOptionPane.showMessageDialog(frame, "Senha atual incorreta. Digite novamente.", "Senha inválida!", JOptionPane.WARNING_MESSAGE);
            }

        } else {
            JOptionPane.showMessageDialog(frame, "Por favor, preencha todos os campos.", "Preenchimento.", JOptionPane.WARNING_MESSAGE);
        }
    }

    public void textLoginFocusGained() {
        frame.textMensagem.setText("Neste campo você o seu login.");
    }

    public void textSenhaFocusGained() {
        frame.textMensagem.setText("Neste campo você digita a sua senha.");
    }

    public void textNovaSenhaFocusGained() {
        frame.textMensagem.setText("Neste campo você digita a sua nova senha.");
    }

    public void textConfirmaSenhaFocusGained() {
        frame.textMensagem.setText("Neste campo você digita a sua senha novamente.");
    }
}
